<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
</html>
<script>
//    var arr = [1,1,3,0,7,4,4,6,10,36,10];
    var arr = []
    for(var i=0;i<20;i++){
        arr.push(Math.floor(Math.random()*100))
    }
    //生成一个无序的arr数组
    function sort(arr,start,end){
        //数组长度为1
        if(start == end ){
            return [arr[start]]
        }else if(start == end-1){
            //数组长度为2，根据数值大小 来排序
            if(arr[start]>arr[end]){
                return [arr[end],arr[start]]
            }else{
                return [arr[start],arr[end]]
            }
        }
        // 数组长度一半
        var l = Math.floor((start+end)/2);
        //左边数组
        var arrLeft = sort(arr, start,l);
        //右边数组
        var arrRight = sort(arr,l+1,end);
        //返回结果
        var result = [];
        //分割成两部分 左右两个数组 只比对数组中的第一个数，那个数值小就把谁放到结果里面，并把小的数值删除掉，固采用数组中的shift方法。一旦出现左边数组或右边数组，没有数据的时候
        //result数组就与还有数据的数组合并 采用 concat,并返回结果
        while(arrLeft.length>0 || arrRight.length>0){
            if(arrLeft.length==0){
                result = result.concat(arrRight);
                break;
            }else if(arrRight.length==0){
                result = result.concat(arrLeft);
                break;
            }
            if(arrLeft[0]<arrRight[0]){
                result.push(arrLeft.shift())
            }else{
                result.push(arrRight.shift());
            }
        }
        return result;
    }
    var arrSort = sort(arr,0,arr.length-1);//参数 数组，开始位置，结束位置

    document.write(arr+'<br/>'+arrSort);
    console.log(arr+'<br/>'+arrSort)


</script>